package main

import "fmt"

func main() {
	var arr = []int{1, 2, 3, 4, 5}
	fmt.Println("arr =", arr)
	var odd = filter(arr, isOdd) //传递函数作为参数
	fmt.Println("arr中的奇数：", odd)
	var even = filter(arr, isEven)
	fmt.Println("arr中的偶数：", even)
}

/*
go中函数也是一种类型，通过type关键字定义
函数类型表示所有拥有相同参数，相同返回值的一种类型
*/
type testInt func(int) bool //定义一种函数类型

//以下两个函数都是testInt类型
func isOdd(i int) bool { //判断输入整数是否为偶数
	return i%2 == 1
}

func isEven(i int) bool { //判断输入整数是否为j奇数
	return i%2 == 0
}

//声明的函数类型在此作为一个参数
func filter(arr []int, fun testInt) []int {
	var res []int
	for i := 0; i < len(arr); i++ {
		if fun(arr[i]) {
			res = append(res, arr[i])
		}
	}
	return res
}
